ZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IDVmMTI5OGQuLmEwOWNkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQAogQ09CSlMteSArPSBhdGFfcGlpeC5vCiBDT0JKUy0kKENPTkZJR19GU0xfU0FUQSkgKz0gZnNsX3NhdGEubwogQ09CSlMtJChDT05GSUdfTElCQVRBKSArPSBsaWJhdGEubworQ09CSlMtJChDT05GSUdfU0FUQV9TSUwzMTE0KSArPSBzYXRhX3NpbDMxMTQubwogQ09CSlMteSArPSBzaWw2ODAubwogQ09CSlMteSArPSBzeW01M2M4eHgubwogQ09CSlMteSArPSBzeXN0ZW1hY2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zYXRhX3NpbDMxMTQuYyBiL2RyaXZlcnMvYmxvY2svc2F0YV9zaWwzMTE0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5OTczNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmxvY2svc2F0YV9zaWwzMTE0LmMKQEAgLTAsMCArMSw4MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEV4Y2l0byBFbGVrdHJvbmlrIGkgU2vlbmUgQUIsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IFRvciBLcmlsbCA8dG9yQGV4Y2l0by5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogVGhpcyBpcyBhIGRyaXZlciBmb3IgU2lsaWNvbiBJbWFnZSBzaWwzMTE0IHNhdGEgY2hpcCBtb2RlbGxlZCBvbgorICogdGhlIGF0YV9waWl4IGRyaXZlcgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGlkZS5oPgorI2luY2x1ZGUgPGxpYmF0YS5oPgorI2luY2x1ZGUgInNhdGFfc2lsMzExNC5oIgorCisvKiBDb252ZXJ0IHNlY3RvcnNpemUgdG8gd29yZHNpemUgKi8KKyNkZWZpbmUgQVRBX1NFQ1RPUl9XT1JEUyAoQVRBX1NFQ1RfU0laRS8yKQorCisvKiBGb3J3YXJkcyAqLwordTggc2lsMzExNF9zcGluX3VwIChpbnQgbnVtKTsKK3U4IHNpbDMxMTRfc3Bpbl9kb3duIChpbnQgbnVtKTsKK3N0YXRpYyBpbnQgc2F0YV9idXNfc29mdHJlc2V0IChpbnQgbnVtKTsKK3N0YXRpYyB2b2lkIHNhdGFfaWRlbnRpZnkgKGludCBudW0sIGludCBkZXYpOworc3RhdGljIHU4IGNoZWNrX3Bvd2VyX21vZGUgKGludCBudW0pOworc3RhdGljIHZvaWQgc2F0YV9wb3J0IChzdHJ1Y3Qgc2F0YV9pb3BvcnRzICppb3BvcnQpOworc3RhdGljIHZvaWQgc2V0X0ZlYXR1cmVfY21kIChpbnQgbnVtLCBpbnQgZGV2KTsKK3N0YXRpYyB1OCBzYXRhX2J1c3lfd2FpdCAoc3RydWN0IHNhdGFfaW9wb3J0cyAqaW9hZGRyLCBpbnQgYml0cywKKwkJCSAgdW5zaWduZWQgaW50IG1heCwgdTggdXNlYWx0c3RhdHVzKTsKK3N0YXRpYyB1OCBzYXRhX2Noa19zdGF0dXMgKHN0cnVjdCBzYXRhX2lvcG9ydHMgKmlvYWRkciwgdTggdXNlYWx0c3RhdHVzKTsKK3N0YXRpYyB2b2lkIG1zbGVlcCAoaW50IGNvdW50KTsKKworc3RhdGljIHUzMiBpb2Jhc2VbNl0gPSB7IDAsIDAsIDAsIDAsIDAsIDB9OwkvKiBQQ0kgQkFSIHJlZ2lzdGVycyBmb3IgZGV2aWNlICovCitleHRlcm4gYmxvY2tfZGV2X2Rlc2NfdCBzYXRhX2Rldl9kZXNjW0NGR19TQVRBX01BWF9ERVZJQ0VdOworCitzdGF0aWMgc3RydWN0IHNhdGFfcG9ydCBwb3J0W0NGR19TQVRBX01BWF9ERVZJQ0VdOworCitzdGF0aWMgdm9pZCBvdXRwdXRfZGF0YSAoc3RydWN0IHNhdGFfaW9wb3J0cyAqaW9hZGRyLCB1MTYgKiBzZWN0X2J1ZiwgaW50IHdvcmRzKQoreworCXdoaWxlICh3b3Jkcy0tKSB7CisJCV9fcmF3X3dyaXRldyAoKnNlY3RfYnVmKyssICh2b2lkICopaW9hZGRyLT5kYXRhX2FkZHIpOworCX0KK30KKworc3RhdGljIGludCBpbnB1dF9kYXRhIChzdHJ1Y3Qgc2F0YV9pb3BvcnRzICppb2FkZHIsIHUxNiAqIHNlY3RfYnVmLCBpbnQgd29yZHMpCit7CisJd2hpbGUgKHdvcmRzLS0pIHsKKwkJKnNlY3RfYnVmKysgPSBfX3Jhd19yZWFkdyAoKHZvaWQgKilpb2FkZHItPmRhdGFfYWRkcik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhdGFfYnVzX3NvZnRyZXNldCAoaW50IG51bSkKK3sKKwl1OCBzdGF0dXMgPSAwOworCisJcG9ydFtudW1dLmRldl9tYXNrID0gMTsKKworCXBvcnRbbnVtXS5jdGxfcmVnID0gMHgwODsJLypEZWZhdWx0IHZhbHVlIG9mIGNvbnRyb2wgcmVnICovCisJd3JpdGViIChwb3J0W251bV0uY3RsX3JlZywgcG9ydFtudW1dLmlvYWRkci5jdGxfYWRkcik7CisJdWRlbGF5ICgxMCk7CisJd3JpdGViIChwb3J0W251bV0uY3RsX3JlZyB8IEFUQV9TUlNULCBwb3J0W251bV0uaW9hZGRyLmN0bF9hZGRyKTsKKwl1ZGVsYXkgKDEwKTsKKwl3cml0ZWIgKHBvcnRbbnVtXS5jdGxfcmVnLCBwb3J0W251bV0uaW9hZGRyLmN0bF9hZGRyKTsKKworCS8qIHNwZWMgbWFuZGF0ZXMgIj49IDJtcyIgYmVmb3JlIGNoZWNraW5nIHN0YXR1cy4KKwkgKiBXZSB3YWl0IDE1MG1zLCBiZWNhdXNlIHRoYXQgd2FzIHRoZSBtYWdpYyBkZWxheSB1c2VkIGZvcgorCSAqIEFUQVBJIGRldmljZXMgaW4gSGFsZSBMYW5kaXMncyBBVEFEUlZSLCBmb3IgdGhlIHBlcmlvZCBvZiB0aW1lCisJICogYmV0d2VlbiB3aGVuIHRoZSBBVEEgY29tbWFuZCByZWdpc3RlciBpcyB3cml0dGVuLCBhbmQgdGhlbgorCSAqIHN0YXR1cyBpcyBjaGVja2VkLiAgQmVjYXVzZSB3YWl0aW5nIGZvciAiYSB3aGlsZSIgYmVmb3JlCisJICogY2hlY2tpbmcgc3RhdHVzIGlzIGZpbmUsIHBvc3QgU1JTVCwgd2UgcGVyZm9ybSB0aGlzIG1hZ2ljCisJICogZGVsYXkgaGVyZSBhcyB3ZWxsLgorCSAqLworCW1zbGVlcCAoMTUwKTsKKwlzdGF0dXMgPSBzYXRhX2J1c3lfd2FpdCAoJnBvcnRbbnVtXS5pb2FkZHIsIEFUQV9CVVNZLCAzMDAsIDApOworCXdoaWxlICgoc3RhdHVzICYgQVRBX0JVU1kpKSB7CisJCW1zbGVlcCAoMTAwKTsKKwkJc3RhdHVzID0gc2F0YV9idXN5X3dhaXQgKCZwb3J0W251bV0uaW9hZGRyLCBBVEFfQlVTWSwgMywgMCk7CisJfQorCisJaWYgKHN0YXR1cyAmIEFUQV9CVVNZKSB7CisJCXByaW50ZiAoImF0YSV1IGlzIHNsb3cgdG8gcmVzcG9uZCxwbHogYmUgcGF0aWVudFxuIiwgcG9ydCk7CisJfQorCisJd2hpbGUgKChzdGF0dXMgJiBBVEFfQlVTWSkpIHsKKwkJbXNsZWVwICgxMDApOworCQlzdGF0dXMgPSBzYXRhX2Noa19zdGF0dXMgKCZwb3J0W251bV0uaW9hZGRyLCAwKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgQVRBX0JVU1kpIHsKKwkJcHJpbnRmICgiYXRhJXUgZmFpbGVkIHRvIHJlc3BvbmQgOiAiLCBwb3J0KTsKKwkJcHJpbnRmICgiYnVzIHJlc2V0IGZhaWxlZFxuIik7CisJCXBvcnRbbnVtXS5kZXZfbWFzayA9IDA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2F0YV9pZGVudGlmeSAoaW50IG51bSwgaW50IGRldikKK3sKKwl1OCBjbWQgPSAwLCBzdGF0dXMgPSAwLCBkZXZubyA9IG51bTsKKwl1MTYgaW9idWZbQVRBX1NFQ1RPUl9XT1JEU107CisJdTY0IG5fc2VjdG9ycyA9IDA7CisKKwltZW1zZXQgKGlvYnVmLCAwLCBzaXplb2YgKGlvYnVmKSk7CisKKwlpZiAoIShwb3J0W251bV0uZGV2X21hc2sgJiAweDAxKSkgeworCQlwcmludGYgKCJkZXYlZCBpcyBub3QgcHJlc2VudCBvbiBwb3J0IyVkXG4iLCBkZXYsIG51bSk7CisJCXJldHVybjsKKwl9CisKKwlkZWJ1ZyAoInBvcnQ9JWQgZGV2PSVkXG4iLCBudW0sIGRldik7CisKKwlzdGF0dXMgPSAwOworCWNtZCA9IEFUQV9DTURfSURfQVRBOwkvKkRldmljZSBJZGVudGlmeSBDb21tYW5kICovCisJd3JpdGViIChjbWQsIHBvcnRbbnVtXS5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKwlyZWFkYiAocG9ydFtudW1dLmlvYWRkci5hbHRzdGF0dXNfYWRkcik7CisJdWRlbGF5ICgxMCk7CisKKwlzdGF0dXMgPSBzYXRhX2J1c3lfd2FpdCAoJnBvcnRbbnVtXS5pb2FkZHIsIEFUQV9CVVNZLCAxMDAwLCAwKTsKKwlpZiAoc3RhdHVzICYgQVRBX0VSUikgeworCQlwcmludGYgKCJcbmRldmljZSBub3QgcmVzcG9uZGluZ1xuIik7CisJCXBvcnRbbnVtXS5kZXZfbWFzayAmPSB+MHgwMTsKKwkJcmV0dXJuOworCX0KKworCWlucHV0X2RhdGEgKCZwb3J0W251bV0uaW9hZGRyLCBpb2J1ZiwgQVRBX1NFQ1RPUl9XT1JEUyk7CisKKwlhdGFfc3dhcF9idWZfbGUxNiAoaW9idWYsIEFUQV9TRUNUT1JfV09SRFMpOworCisJZGVidWcgKCJTcGVjaWZpYyBjb25maWc6ICV4XG4iLCBpb2J1ZlsyXSk7CisKKwkvKiB3ZSByZXF1aXJlIExCQSBhbmQgRE1BIHN1cHBvcnQgKGJpdHMgOCAmIDkgb2Ygd29yZCA0OSkgKi8KKwlpZiAoIWF0YV9pZF9oYXNfZG1hIChpb2J1ZikgfHwgIWF0YV9pZF9oYXNfbGJhIChpb2J1ZikpIHsKKwkJZGVidWcgKCJhdGEldTogbm8gZG1hL2xiYVxuIiwgbnVtKTsKKwl9CisjaWZkZWYgREVCVUcKKwlhdGFfZHVtcF9pZCAoaW9idWYpOworI2VuZGlmCisJbl9zZWN0b3JzID0gYXRhX2lkX25fc2VjdG9ycyAoaW9idWYpOworCisJaWYgKG5fc2VjdG9ycyA9PSAwKSB7CisJCXBvcnRbbnVtXS5kZXZfbWFzayAmPSB+MHgwMTsKKwkJcmV0dXJuOworCX0KKwlhdGFfaWRfY19zdHJpbmcgKGlvYnVmLCAodW5zaWduZWQgY2hhciAqKXNhdGFfZGV2X2Rlc2NbZGV2bm9dLnJldmlzaW9uLAorCQkJIEFUQV9JRF9GV19SRVYsIHNpemVvZiAoc2F0YV9kZXZfZGVzY1tkZXZub10ucmV2aXNpb24pKTsKKwlhdGFfaWRfY19zdHJpbmcgKGlvYnVmLCAodW5zaWduZWQgY2hhciAqKXNhdGFfZGV2X2Rlc2NbZGV2bm9dLnZlbmRvciwKKwkJCSBBVEFfSURfUFJPRCwgc2l6ZW9mIChzYXRhX2Rldl9kZXNjW2Rldm5vXS52ZW5kb3IpKTsKKwlhdGFfaWRfY19zdHJpbmcgKGlvYnVmLCAodW5zaWduZWQgY2hhciAqKXNhdGFfZGV2X2Rlc2NbZGV2bm9dLnByb2R1Y3QsCisJCQkgQVRBX0lEX1NFUk5PLCBzaXplb2YgKHNhdGFfZGV2X2Rlc2NbZGV2bm9dLnByb2R1Y3QpKTsKKworCS8qIFRPRE8gLSBhdG0gd2UgYXN1bWUgaGFyZGRpc2sgaWUgbm90IHJlbW92YWJsZSAqLworCXNhdGFfZGV2X2Rlc2NbZGV2bm9dLnJlbW92YWJsZSA9IDA7CisKKwlzYXRhX2Rldl9kZXNjW2Rldm5vXS5sYmEgPSAodTMyKSBuX3NlY3RvcnM7CisJZGVidWcgKCJsYmE9MHgleFxuIiwgc2F0YV9kZXZfZGVzY1tkZXZub10ubGJhKTsKKworI2lmZGVmIENPTkZJR19MQkE0OAorCWlmIChpb2J1Zls4M10gJiAoMSA8PCAxMCkpIHsKKwkJc2F0YV9kZXZfZGVzY1tkZXZub10ubGJhNDggPSAxOworCX0gZWxzZSB7CisJCXNhdGFfZGV2X2Rlc2NbZGV2bm9dLmxiYTQ4ID0gMDsKKwl9CisjZW5kaWYKKworCS8qIGFzc3VtaW5nIEhEICovCisJc2F0YV9kZXZfZGVzY1tkZXZub10udHlwZSA9IERFVl9UWVBFX0hBUkRESVNLOworCXNhdGFfZGV2X2Rlc2NbZGV2bm9dLmJsa3N6ID0gQVRBX1NFQ1RfU0laRTsKKwlzYXRhX2Rldl9kZXNjW2Rldm5vXS5sdW4gPSAwOwkvKiBqdXN0IHRvIGZpbGwgc29tZXRoaW5nIGluLi4uICovCit9CisKK3N0YXRpYyB2b2lkIHNldF9GZWF0dXJlX2NtZCAoaW50IG51bSwgaW50IGRldikKK3sKKwl1OCBzdGF0dXMgPSAwOworCisJaWYgKCEocG9ydFtudW1dLmRldl9tYXNrICYgMHgwMSkpIHsKKwkJZGVidWcgKCJkZXYlZCBpcyBub3QgcHJlc2VudCBvbiBwb3J0IyVkXG4iLCBkZXYsIG51bSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWIgKFNFVEZFQVRVUkVTX1hGRVIsIHBvcnRbbnVtXS5pb2FkZHIuZmVhdHVyZV9hZGRyKTsKKwl3cml0ZWIgKFhGRVJfUElPXzQsIHBvcnRbbnVtXS5pb2FkZHIubnNlY3RfYWRkcik7CisJd3JpdGViICgwLCBwb3J0W251bV0uaW9hZGRyLmxiYWxfYWRkcik7CisJd3JpdGViICgwLCBwb3J0W251bV0uaW9hZGRyLmxiYW1fYWRkcik7CisJd3JpdGViICgwLCBwb3J0W251bV0uaW9hZGRyLmxiYWhfYWRkcik7CisKKwl3cml0ZWIgKEFUQV9ERVZJQ0VfT0JTLCBwb3J0W251bV0uaW9hZGRyLmRldmljZV9hZGRyKTsKKwl3cml0ZWIgKEFUQV9DTURfU0VUX0ZFQVRVUkVTLCBwb3J0W251bV0uaW9hZGRyLmNvbW1hbmRfYWRkcik7CisKKwl1ZGVsYXkgKDUwKTsKKwltc2xlZXAgKDE1MCk7CisKKwlzdGF0dXMgPSBzYXRhX2J1c3lfd2FpdCAoJnBvcnRbbnVtXS5pb2FkZHIsIEFUQV9CVVNZLCA1MDAwLCAwKTsKKwlpZiAoKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9FUlIpKSkgeworCQlwcmludGYgKCJFcnJvciAgOiBzdGF0dXMgMHglMDJ4XG4iLCBzdGF0dXMpOworCQlwb3J0W251bV0uZGV2X21hc2sgJj0gfjB4MDE7CisJfQorfQorCit1OCBzaWwzMTE0X3NwaW5fZG93biAoaW50IG51bSkKK3sKKwl1OCBzdGF0dXMgPSAwOworCisJZGVidWcgKCJTcGluIGRvd24gZGlza1xuIik7CisKKwlpZiAoIShwb3J0W251bV0uZGV2X21hc2sgJiAweDAxKSkgeworCQlkZWJ1ZyAoIkRldmljZSBhdGElZCBpcyBub3QgcHJlc2VudFxuIiwgbnVtKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKChzdGF0dXMgPSBjaGVja19wb3dlcl9tb2RlIChudW0pKSA9PSAweDAwKSB7CisJCWRlYnVnICgiQWxyZWFkeSBpbiBzdGFuZGJ5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0YXR1cyA9PSAweDAxKSB7CisJCXByaW50ZiAoIkZhaWxlZCB0byBjaGVjayBwb3dlciBtb2RlIG9uIGF0YSVkXG4iLCBudW0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoISgoc3RhdHVzID0gc2F0YV9jaGtfc3RhdHVzICgmcG9ydFtudW1dLmlvYWRkciwgMCkpICYgQVRBX0RSRFkpKSB7CisJCXByaW50ZiAoIkRldmljZSBhdGElZCBub3QgcmVhZHlcbiIsIG51bSk7CisJCXJldHVybiAxOworCX0KKworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5mZWF0dXJlX2FkZHIpOworCisJd3JpdGViICgweDAwLCBwb3J0W251bV0uaW9hZGRyLm5zZWN0X2FkZHIpOworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5sYmFsX2FkZHIpOworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5sYmFtX2FkZHIpOworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5sYmFoX2FkZHIpOworCisJd3JpdGViIChBVEFfREVWSUNFX09CUywgcG9ydFtudW1dLmlvYWRkci5kZXZpY2VfYWRkcik7CisJd3JpdGViIChBVEFfQ01EX1NUQU5EQlksIHBvcnRbbnVtXS5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKworCXN0YXR1cyA9IHNhdGFfYnVzeV93YWl0ICgmcG9ydFtudW1dLmlvYWRkciwgQVRBX0JVU1ksIDMwMDAwLCAwKTsKKwlpZiAoKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9FUlIpKSkgeworCQlwcmludGYgKCJFcnJvciB3YWl0aW5nIGZvciBkaXNrIHNwaW4gZG93bjogc3RhdHVzIDB4JTAyeFxuIiwKKwkJCXN0YXR1cyk7CisJCXBvcnRbbnVtXS5kZXZfbWFzayAmPSB+MHgwMTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit1OCBzaWwzMTE0X3NwaW5fdXAgKGludCBudW0pCit7CisJdTggc3RhdHVzID0gMDsKKworCWRlYnVnICgiU3BpbiB1cCBkaXNrXG4iKTsKKworCWlmICghKHBvcnRbbnVtXS5kZXZfbWFzayAmIDB4MDEpKSB7CisJCWRlYnVnICgiRGV2aWNlIGF0YSVkIGlzIG5vdCBwcmVzZW50XG4iLCBudW0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKHN0YXR1cyA9IGNoZWNrX3Bvd2VyX21vZGUgKG51bSkpICE9IDB4MDApIHsKKwkJaWYgKHN0YXR1cyA9PSAweDAxKSB7CisJCQlwcmludGYgKCJGYWlsZWQgdG8gY2hlY2sgcG93ZXIgbW9kZSBvbiBhdGElZFxuIiwgbnVtKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJLyogc2hvdWxkIGJlIHVwIGFuZCBydW5uaW5nIGFscmVhZHkgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKCEoKHN0YXR1cyA9IHNhdGFfY2hrX3N0YXR1cyAoJnBvcnRbbnVtXS5pb2FkZHIsIDApKSAmIEFUQV9EUkRZKSkgeworCQlwcmludGYgKCJEZXZpY2UgYXRhJWQgbm90IHJlYWR5XG4iLCBudW0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlkZWJ1ZyAoIlN0YXV0dXMgb2YgZGV2aWNlIGNoZWNrOiAlZFxuIiwgc3RhdHVzKTsKKworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5mZWF0dXJlX2FkZHIpOworCisJd3JpdGViICgweDAwLCBwb3J0W251bV0uaW9hZGRyLm5zZWN0X2FkZHIpOworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5sYmFsX2FkZHIpOworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5sYmFtX2FkZHIpOworCXdyaXRlYiAoMHgwMCwgcG9ydFtudW1dLmlvYWRkci5sYmFoX2FkZHIpOworCisJd3JpdGViIChBVEFfREVWSUNFX09CUywgcG9ydFtudW1dLmlvYWRkci5kZXZpY2VfYWRkcik7CisJd3JpdGViIChBVEFfQ01EX0lETEUsIHBvcnRbbnVtXS5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKworCXN0YXR1cyA9IHNhdGFfYnVzeV93YWl0ICgmcG9ydFtudW1dLmlvYWRkciwgQVRBX0JVU1ksIDMwMDAwLCAwKTsKKwlpZiAoKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9FUlIpKSkgeworCQlwcmludGYgKCJFcnJvciB3YWl0aW5nIGZvciBkaXNrIHNwaW4gdXA6IHN0YXR1cyAweCUwMnhcbiIsCisJCQlzdGF0dXMpOworCQlwb3J0W251bV0uZGV2X21hc2sgJj0gfjB4MDE7CisJCXJldHVybiAxOworCX0KKworCS8qIFdhaXQgZm9yIGRpc2sgdG8gZW50ZXIgQWN0aXZlIHN0YXRlICovCisJZG8geworCQltc2xlZXAgKDEwKTsKKwkJc3RhdHVzID0gY2hlY2tfcG93ZXJfbW9kZSAobnVtKTsKKwl9IHdoaWxlICgoc3RhdHVzID09IDB4MDApIHx8IChzdGF0dXMgPT0gMHg4MCkpOworCisJaWYgKHN0YXR1cyA9PSAweDAxKSB7CisJCXByaW50ZiAoIkZhbGllZCB3YWl0aW5nIGZvciBkaXNrIHRvIHNwaW4gdXBcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJuIHZhbHVlIGlzIG5vdCB0aGUgdXN1YWwgaGVyZQorICogMHgwMCAtIERldmljZSBzdGFuZCBieQorICogMHgwMSAtIE9wZXJhdGlvbiBmYWlsZWQKKyAqIDB4ODAgLSBEZXZpY2UgaWRsZQorICogMHhmZiAtIERldmljZSBhY3RpdmUKKyovCitzdGF0aWMgdTggY2hlY2tfcG93ZXJfbW9kZSAoaW50IG51bSkKK3sKKwl1OCBzdGF0dXMgPSAwOworCXU4IHJlcyA9IDA7CisJaWYgKCEocG9ydFtudW1dLmRldl9tYXNrICYgMHgwMSkpIHsKKwkJZGVidWcgKCJEZXZpY2UgYXRhJWQgaXMgbm90IHByZXNlbnRcbiIsIG51bSk7CisJCXJldHVybiAxOworCX0KKworCWlmICghKHNhdGFfY2hrX3N0YXR1cyAoJnBvcnRbbnVtXS5pb2FkZHIsIDApICYgQVRBX0RSRFkpKSB7CisJCXByaW50ZiAoIkRldmljZSBhdGElZCBub3QgcmVhZHlcbiIsIG51bSk7CisJCXJldHVybiAxOworCX0KKworCXdyaXRlYiAoMCwgcG9ydFtudW1dLmlvYWRkci5mZWF0dXJlX2FkZHIpOworCXdyaXRlYiAoMCwgcG9ydFtudW1dLmlvYWRkci5uc2VjdF9hZGRyKTsKKwl3cml0ZWIgKDAsIHBvcnRbbnVtXS5pb2FkZHIubGJhbF9hZGRyKTsKKwl3cml0ZWIgKDAsIHBvcnRbbnVtXS5pb2FkZHIubGJhbV9hZGRyKTsKKwl3cml0ZWIgKDAsIHBvcnRbbnVtXS5pb2FkZHIubGJhaF9hZGRyKTsKKworCXdyaXRlYiAoQVRBX0RFVklDRV9PQlMsIHBvcnRbbnVtXS5pb2FkZHIuZGV2aWNlX2FkZHIpOworCXdyaXRlYiAoQVRBX0NNRF9DSEtfUE9XRVIsIHBvcnRbbnVtXS5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKworCXN0YXR1cyA9IHNhdGFfYnVzeV93YWl0ICgmcG9ydFtudW1dLmlvYWRkciwgQVRBX0JVU1ksIDUwMDAsIDApOworCWlmICgoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0VSUikpKSB7CisJCXByaW50ZgorCQkgICAgKCJFcnJvciB3YWl0aW5nIGZvciBjaGVjayBwb3dlciBtb2RlIGNvbXBsZXRlICA6IHN0YXR1cyAweCUwMnhcbiIsCisJCSAgICAgc3RhdHVzKTsKKwkJcG9ydFtudW1dLmRldl9tYXNrICY9IH4weDAxOworCQlyZXR1cm4gMTsKKwl9CisJcmVzID0gcmVhZGIgKHBvcnRbbnVtXS5pb2FkZHIubnNlY3RfYWRkcik7CisJZGVidWcgKCJDaGVjayBwb3dlcm1vZGU6ICVkXG4iLCByZXMpOworCXJldHVybiByZXM7CisKK30KKworc3RhdGljIHZvaWQgc2F0YV9wb3J0IChzdHJ1Y3Qgc2F0YV9pb3BvcnRzICppb3BvcnQpCit7CisJaW9wb3J0LT5kYXRhX2FkZHIgPSBpb3BvcnQtPmNtZF9hZGRyICsgQVRBX1JFR19EQVRBOworCWlvcG9ydC0+ZXJyb3JfYWRkciA9IGlvcG9ydC0+Y21kX2FkZHIgKyBBVEFfUkVHX0VSUjsKKwlpb3BvcnQtPmZlYXR1cmVfYWRkciA9IGlvcG9ydC0+Y21kX2FkZHIgKyBBVEFfUkVHX0ZFQVRVUkU7CisJaW9wb3J0LT5uc2VjdF9hZGRyID0gaW9wb3J0LT5jbWRfYWRkciArIEFUQV9SRUdfTlNFQ1Q7CisJaW9wb3J0LT5sYmFsX2FkZHIgPSBpb3BvcnQtPmNtZF9hZGRyICsgQVRBX1JFR19MQkFMOworCWlvcG9ydC0+bGJhbV9hZGRyID0gaW9wb3J0LT5jbWRfYWRkciArIEFUQV9SRUdfTEJBTTsKKwlpb3BvcnQtPmxiYWhfYWRkciA9IGlvcG9ydC0+Y21kX2FkZHIgKyBBVEFfUkVHX0xCQUg7CisJaW9wb3J0LT5kZXZpY2VfYWRkciA9IGlvcG9ydC0+Y21kX2FkZHIgKyBBVEFfUkVHX0RFVklDRTsKKwlpb3BvcnQtPnN0YXR1c19hZGRyID0gaW9wb3J0LT5jbWRfYWRkciArIEFUQV9SRUdfU1RBVFVTOworCWlvcG9ydC0+Y29tbWFuZF9hZGRyID0gaW9wb3J0LT5jbWRfYWRkciArIEFUQV9SRUdfQ01EOworfQorCitzdGF0aWMgdTggd2FpdF9mb3JfaXJxIChpbnQgbnVtLCB1bnNpZ25lZCBpbnQgbWF4KQoreworCisJdTMyIHBvcnQgPSBpb2Jhc2VbNV07CisJc3dpdGNoIChudW0pIHsKKwljYXNlIDA6CisJCXBvcnQgKz0gVk5EX1RGX0NOU1RfQ0gwOworCQlicmVhazsKKwljYXNlIDE6CisJCXBvcnQgKz0gVk5EX1RGX0NOU1RfQ0gxOworCQlicmVhazsKKwljYXNlIDI6CisJCXBvcnQgKz0gVk5EX1RGX0NOU1RfQ0gyOworCQlicmVhazsKKwljYXNlIDM6CisJCXBvcnQgKz0gVk5EX1RGX0NOU1RfQ0gzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisKKwlkbyB7CisJCWlmIChyZWFkbCAocG9ydCkgJiBWTkRfVEZfQ05TVF9JTlRTVCkgeworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5ICgxMDAwKTsKKwkJbWF4LS07CisJfSB3aGlsZSAoKG1heCA+IDApKTsKKworCXJldHVybiAobWF4ID09IDApOworfQorCitzdGF0aWMgdTggc2F0YV9idXN5X3dhaXQgKHN0cnVjdCBzYXRhX2lvcG9ydHMgKmlvYWRkciwgaW50IGJpdHMsCisJCQkgIHVuc2lnbmVkIGludCBtYXgsIHU4IHVzZWFsdHN0YXR1cykKK3sKKwl1OCBzdGF0dXM7CisKKwlkbyB7CisJCWlmICghKChzdGF0dXMgPSBzYXRhX2Noa19zdGF0dXMgKGlvYWRkciwgdXNlYWx0c3RhdHVzKSkgJiBiaXRzKSkgeworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5ICgxMDAwKTsKKwkJbWF4LS07CisJfSB3aGlsZSAoKHN0YXR1cyAmIGJpdHMpICYmIChtYXggPiAwKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTggc2F0YV9jaGtfc3RhdHVzIChzdHJ1Y3Qgc2F0YV9pb3BvcnRzICppb2FkZHIsIHU4IHVzZWFsdHN0YXR1cykKK3sKKwlpZiAoIXVzZWFsdHN0YXR1cykgeworCQlyZXR1cm4gcmVhZGIgKGlvYWRkci0+c3RhdHVzX2FkZHIpOworCX0gZWxzZSB7CisJCXJldHVybiByZWFkYiAoaW9hZGRyLT5hbHRzdGF0dXNfYWRkcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtc2xlZXAgKGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQl1ZGVsYXkgKDEwMDApOworfQorCisvKiBSZWFkIHVwIHRvIDI1NSBzZWN0b3JzCisgKgorICogUmV0dXJucyBzZWN0b3JzIHJlYWQKKyovCitzdGF0aWMgdTggZG9fb25lX3JlYWQgKGludCBkZXZpY2UsIHVsb25nIGJsb2NrLCB1OCBibGtjbnQsIHUxNiAqIGJ1ZmYsCisJCSAgICAgICB1Y2hhciBsYmE0OCkKK3sKKworCXU4IHNyID0gMDsKKwl1OCBzdGF0dXM7CisJdTY0IGJsa25yID0gKHU2NCkgYmxvY2s7CisKKwlpZiAoIShzYXRhX2Noa19zdGF0dXMgKCZwb3J0W2RldmljZV0uaW9hZGRyLCAwKSAmIEFUQV9EUkRZKSkgeworCQlwcmludGYgKCJEZXZpY2UgYXRhJWQgbm90IHJlYWR5XG4iLCBkZXZpY2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBTZXQgdXAgdHJhbnNmZXIgKi8KKyNpZmRlZiBDT05GSUdfTEJBNDgKKwlpZiAobGJhNDgpIHsKKwkJLyogd3JpdGUgaGlnaCBiaXRzICovCisJCXdyaXRlYiAoMCwgcG9ydFtkZXZpY2VdLmlvYWRkci5uc2VjdF9hZGRyKTsKKwkJd3JpdGViICgoYmxrbnIgPj4gMjQpICYgMHhGRiwgcG9ydFtkZXZpY2VdLmlvYWRkci5sYmFsX2FkZHIpOworCQl3cml0ZWIgKChibGtuciA+PiAzMikgJiAweEZGLCBwb3J0W2RldmljZV0uaW9hZGRyLmxiYW1fYWRkcik7CisJCXdyaXRlYiAoKGJsa25yID4+IDQwKSAmIDB4RkYsIHBvcnRbZGV2aWNlXS5pb2FkZHIubGJhaF9hZGRyKTsKKwl9CisjZW5kaWYKKwl3cml0ZWIgKGJsa2NudCwgcG9ydFtkZXZpY2VdLmlvYWRkci5uc2VjdF9hZGRyKTsKKwl3cml0ZWIgKCgoYmxrbnIpID4+IDApICYgMHhGRiwgcG9ydFtkZXZpY2VdLmlvYWRkci5sYmFsX2FkZHIpOworCXdyaXRlYiAoKGJsa25yID4+IDgpICYgMHhGRiwgcG9ydFtkZXZpY2VdLmlvYWRkci5sYmFtX2FkZHIpOworCXdyaXRlYiAoKGJsa25yID4+IDE2KSAmIDB4RkYsIHBvcnRbZGV2aWNlXS5pb2FkZHIubGJhaF9hZGRyKTsKKworI2lmZGVmIENPTkZJR19MQkE0OAorCWlmIChsYmE0OCkgeworCQl3cml0ZWIgKEFUQV9MQkEsIHBvcnRbZGV2aWNlXS5pb2FkZHIuZGV2aWNlX2FkZHIpOworCQl3cml0ZWIgKEFUQV9DTURfUElPX1JFQURfRVhULCBwb3J0W2RldmljZV0uaW9hZGRyLmNvbW1hbmRfYWRkcik7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXdyaXRlYiAoQVRBX0xCQSB8ICgoYmxrbnIgPj4gMjQpICYgMHhGKSwKKwkJCXBvcnRbZGV2aWNlXS5pb2FkZHIuZGV2aWNlX2FkZHIpOworCQl3cml0ZWIgKEFUQV9DTURfUElPX1JFQUQsIHBvcnRbZGV2aWNlXS5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKwl9CisKKwlzdGF0dXMgPSBzYXRhX2J1c3lfd2FpdCAoJnBvcnRbZGV2aWNlXS5pb2FkZHIsIEFUQV9CVVNZLCAxMDAwMCwgMSk7CisKKwlpZiAoc3RhdHVzICYgQVRBX0JVU1kpIHsKKwkJdTggZXJyID0gMDsKKworCQlwcmludGYgKCJEZXZpY2UgJWQgbm90IHJlc3BvbmRpbmcgc3RhdHVzICVkXG4iLCBkZXZpY2UsIHN0YXR1cyk7CisJCWVyciA9IHJlYWRiIChwb3J0W2RldmljZV0uaW9hZGRyLmVycm9yX2FkZHIpOworCQlwcmludGYgKCJFcnJvciByZWcgPSAweCV4XG4iLCBlcnIpOworCisJCXJldHVybiAoc3IpOworCX0KKwl3aGlsZSAoYmxrY250LS0pIHsKKworCQlpZiAod2FpdF9mb3JfaXJxIChkZXZpY2UsIDUwMCkpIHsKKwkJCXByaW50ZiAoImF0YSV1IGlycSBmYWlsZWRcbiIsIGRldmljZSk7CisJCQlyZXR1cm4gc3I7CisJCX0KKworCQlzdGF0dXMgPSBzYXRhX2Noa19zdGF0dXMgKCZwb3J0W2RldmljZV0uaW9hZGRyLCAwKTsKKwkJaWYgKHN0YXR1cyAmIEFUQV9FUlIpIHsKKwkJCXByaW50ZiAoImF0YSV1IGVycm9yICVkXG4iLCBkZXZpY2UsCisJCQkJcmVhZGIgKHBvcnRbZGV2aWNlXS5pb2FkZHIuZXJyb3JfYWRkcikpOworCQkJcmV0dXJuIHNyOworCQl9CisJCS8qIFJlYWQgb25lIHNlY3RvciAqLworCQlpbnB1dF9kYXRhICgmcG9ydFtkZXZpY2VdLmlvYWRkciwgYnVmZiwgQVRBX1NFQ1RPUl9XT1JEUyk7CisJCWJ1ZmYgKz0gQVRBX1NFQ1RPUl9XT1JEUzsKKwkJc3IrKzsKKworCX0KKwlyZXR1cm4gc3I7Cit9CisKK3Vsb25nIHNhdGFfcmVhZCAoaW50IGRldmljZSwgdWxvbmcgYmxvY2ssIGxiYWludF90IGJsa2NudCwgdm9pZCAqYnVmZikKK3sKKwl1bG9uZyBuID0gMCwgc3JlYWQ7CisJdTE2ICpidWZmZXIgPSAodTE2ICopIGJ1ZmY7CisJdTggc3RhdHVzID0gMDsKKwl1NjQgYmxrbnIgPSAodTY0KSBibG9jazsKKwl1bnNpZ25lZCBjaGFyIGxiYTQ4ID0gMDsKKworI2lmZGVmIENPTkZJR19MQkE0OAorCWlmIChibGtuciA+IDB4ZmZmZmZmZikgeworCQlpZiAoIXNhdGFfZGV2X2Rlc2NbZGV2aWNlXS5sYmE0OCkgeworCQkJcHJpbnRmICgiRHJpdmUgZG9lc24ndCBzdXBwb3J0IDQ4LWJpdCBhZGRyZXNzaW5nXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIG1vcmUgdGhhbiAyOCBiaXRzIHVzZWQsIHVzZSA0OGJpdCBtb2RlICovCisJCWxiYTQ4ID0gMTsKKwl9CisjZW5kaWYKKworCXdoaWxlIChibGtjbnQgPiAwKSB7CisKKwkJaWYgKGJsa2NudCA+IDI1NSkgeworCQkJc3JlYWQgPSAyNTU7CisJCX0gZWxzZSB7CisJCQlzcmVhZCA9IGJsa2NudDsKKwkJfQorCisJCXN0YXR1cyA9IGRvX29uZV9yZWFkIChkZXZpY2UsIGJsa25yLCBzcmVhZCwgYnVmZmVyLCBsYmE0OCk7CisJCWlmIChzdGF0dXMgIT0gc3JlYWQpIHsKKwkJCXByaW50ZiAoIlJlYWQgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBuOworCQl9CisKKwkJYmxrY250IC09IHNyZWFkOworCQlibGtuciArPSBzcmVhZDsKKwkJbiArPSBzcmVhZDsKKwkJYnVmZmVyICs9IHNyZWFkICogQVRBX1NFQ1RPUl9XT1JEUzsKKwl9CisJcmV0dXJuIG47Cit9CisKK3Vsb25nIHNhdGFfd3JpdGUgKGludCBkZXZpY2UsIHVsb25nIGJsb2NrLCBsYmFpbnRfdCBibGtjbnQsIGNvbnN0IHZvaWQgKmJ1ZmYpCit7CisJdWxvbmcgbiA9IDA7CisJdTE2ICpidWZmZXIgPSAodTE2ICopIGJ1ZmY7CisJdW5zaWduZWQgY2hhciBzdGF0dXMgPSAwLCBudW0gPSAwOworCXU2NCBibGtuciA9ICh1NjQpIGJsb2NrOworI2lmZGVmIENPTkZJR19MQkE0OAorCXVuc2lnbmVkIGNoYXIgbGJhNDggPSAwOworCisJaWYgKGJsa25yID4gMHhmZmZmZmZmKSB7CisJCWlmICghc2F0YV9kZXZfZGVzY1tkZXZpY2VdLmxiYTQ4KSB7CisJCQlwcmludGYgKCJEcml2ZSBkb2Vzbid0IHN1cHBvcnQgNDgtYml0IGFkZHJlc3NpbmdcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyogbW9yZSB0aGFuIDI4IGJpdHMgdXNlZCwgdXNlIDQ4Yml0IG1vZGUgKi8KKwkJbGJhNDggPSAxOworCX0KKyNlbmRpZgorCS8qUG9ydCBOdW1iZXIgKi8KKwludW0gPSBkZXZpY2U7CisKKwl3aGlsZSAoYmxrY250LS0gPiAwKSB7CisJCXN0YXR1cyA9IHNhdGFfYnVzeV93YWl0ICgmcG9ydFtudW1dLmlvYWRkciwgQVRBX0JVU1ksIDUwMCwgMCk7CisJCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkgeworCQkJcHJpbnRmICgiYXRhJXUgZmFpbGVkIHRvIHJlc3BvbmRcbiIsIHBvcnRbbnVtXS5wb3J0X25vKTsKKwkJCXJldHVybiBuOworCQl9CisjaWZkZWYgQ09ORklHX0xCQTQ4CisJCWlmIChsYmE0OCkgeworCQkJLyogd3JpdGUgaGlnaCBiaXRzICovCisJCQl3cml0ZWIgKDAsIHBvcnRbbnVtXS5pb2FkZHIubnNlY3RfYWRkcik7CisJCQl3cml0ZWIgKChibGtuciA+PiAyNCkgJiAweEZGLAorCQkJCXBvcnRbbnVtXS5pb2FkZHIubGJhbF9hZGRyKTsKKwkJCXdyaXRlYiAoKGJsa25yID4+IDMyKSAmIDB4RkYsCisJCQkJcG9ydFtudW1dLmlvYWRkci5sYmFtX2FkZHIpOworCQkJd3JpdGViICgoYmxrbnIgPj4gNDApICYgMHhGRiwKKwkJCQlwb3J0W251bV0uaW9hZGRyLmxiYWhfYWRkcik7CisJCX0KKyNlbmRpZgorCQl3cml0ZWIgKDEsIHBvcnRbbnVtXS5pb2FkZHIubnNlY3RfYWRkcik7CisJCXdyaXRlYiAoKGJsa25yID4+IDApICYgMHhGRiwgcG9ydFtudW1dLmlvYWRkci5sYmFsX2FkZHIpOworCQl3cml0ZWIgKChibGtuciA+PiA4KSAmIDB4RkYsIHBvcnRbbnVtXS5pb2FkZHIubGJhbV9hZGRyKTsKKwkJd3JpdGViICgoYmxrbnIgPj4gMTYpICYgMHhGRiwgcG9ydFtudW1dLmlvYWRkci5sYmFoX2FkZHIpOworI2lmZGVmIENPTkZJR19MQkE0OAorCQlpZiAobGJhNDgpIHsKKwkJCXdyaXRlYiAoQVRBX0xCQSwgcG9ydFtudW1dLmlvYWRkci5kZXZpY2VfYWRkcik7CisJCQl3cml0ZWIgKEFUQV9DTURfUElPX1dSSVRFX0VYVCwgcG9ydFtudW1dLmlvYWRkci5jb21tYW5kX2FkZHIpOworCQl9IGVsc2UKKyNlbmRpZgorCQl7CisJCQl3cml0ZWIgKEFUQV9MQkEgfCAoKGJsa25yID4+IDI0KSAmIDB4RiksCisJCQkJcG9ydFtudW1dLmlvYWRkci5kZXZpY2VfYWRkcik7CisJCQl3cml0ZWIgKEFUQV9DTURfUElPX1dSSVRFLCBwb3J0W251bV0uaW9hZGRyLmNvbW1hbmRfYWRkcik7CisJCX0KKworCQltc2xlZXAgKDUwKTsKKwkJLyptYXkgdGFrZSB1cCB0byA0IHNlYyAqLworCQlzdGF0dXMgPSBzYXRhX2J1c3lfd2FpdCAoJnBvcnRbbnVtXS5pb2FkZHIsIEFUQV9CVVNZLCA0MDAwLCAwKTsKKwkJaWYgKChzdGF0dXMgJiAoQVRBX0RSUSB8IEFUQV9CVVNZIHwgQVRBX0VSUikpICE9IEFUQV9EUlEpIHsKKwkJCXByaW50ZiAoIkVycm9yIG5vIERSUSBkZXYgJWQgYmxrICVsZDogc3RzIDB4JTAyeFxuIiwKKwkJCQlkZXZpY2UsICh1bG9uZykgYmxrbnIsIHN0YXR1cyk7CisJCQlyZXR1cm4gKG4pOworCQl9CisKKwkJb3V0cHV0X2RhdGEgKCZwb3J0W251bV0uaW9hZGRyLCBidWZmZXIsIEFUQV9TRUNUT1JfV09SRFMpOworCQlyZWFkYiAocG9ydFtudW1dLmlvYWRkci5hbHRzdGF0dXNfYWRkcik7CisJCXVkZWxheSAoNTApOworCisJCSsrbjsKKwkJKytibGtucjsKKwkJYnVmZmVyICs9IEFUQV9TRUNUT1JfV09SRFM7CisJfQorCXJldHVybiBuOworfQorCisvKiBEcml2ZXIgaW1wbGVtZW50YXRpb24gKi8KK3N0YXRpYyB1OCBzaWxfZ2V0X2RldmljZV9jYWNoZV9saW5lIChwY2lfZGV2X3QgcGRldikKK3sKKwl1OCBjYWNoZV9saW5lID0gMDsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZSAocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgJmNhY2hlX2xpbmUpOworCXJldHVybiBjYWNoZV9saW5lOworfQorCitpbnQgaW5pdF9zYXRhIChpbnQgZGV2KQoreworCXN0YXRpYyB1OCBpbml0X2RvbmUgPSAwOworCXN0YXRpYyBpbnQgcmVzID0gMTsKKwlwY2lfZGV2X3QgZGV2bm87CisJdTggY2xzID0gMDsKKwl1MTYgY21kID0gMDsKKwl1MzIgc2NvbmYgPSAwOworCisJaWYgKGluaXRfZG9uZSkgeworCQlyZXR1cm4gcmVzOworCX0KKworCWluaXRfZG9uZSA9IDE7CisKKwlpZiAoKGRldm5vID0gcGNpX2ZpbmRfZGV2aWNlIChTSUxfVkVORF9JRCwgU0lMMzExNF9ERVZJQ0VfSUQsIDApKSA9PSAtMSkgeworCQlyZXMgPSAxOworCQlyZXR1cm4gcmVzOworCX0KKworCS8qIFJlYWQgb3V0IGFsbCBCQVJzLCBldmVuIHRob3VnaCB3ZSBvbmx5IHVzZSBNTUlPIGZyb20gQkFSNSAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoZGV2bm8sIFBDSV9CQVNFX0FERFJFU1NfMCwgJmlvYmFzZVswXSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChkZXZubywgUENJX0JBU0VfQUREUkVTU18xLCAmaW9iYXNlWzFdKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQgKGRldm5vLCBQQ0lfQkFTRV9BRERSRVNTXzIsICZpb2Jhc2VbMl0pOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoZGV2bm8sIFBDSV9CQVNFX0FERFJFU1NfMywgJmlvYmFzZVszXSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChkZXZubywgUENJX0JBU0VfQUREUkVTU180LCAmaW9iYXNlWzRdKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQgKGRldm5vLCBQQ0lfQkFTRV9BRERSRVNTXzUsICZpb2Jhc2VbNV0pOworCisJaWYgKChpb2Jhc2VbMF0gPT0gMHhGRkZGRkZGRikgfHwgKGlvYmFzZVsxXSA9PSAweEZGRkZGRkZGKSB8fAorCSAgICAoaW9iYXNlWzJdID09IDB4RkZGRkZGRkYpIHx8IChpb2Jhc2VbM10gPT0gMHhGRkZGRkZGRikgfHwKKwkgICAgKGlvYmFzZVs0XSA9PSAweEZGRkZGRkZGKSB8fCAoaW9iYXNlWzVdID09IDB4RkZGRkZGRkYpKSB7CisJCXByaW50ZiAoIkVycm9yIG5vIGJhc2UgYWRkciBmb3IgU0FUQSBjb250cm9sbGVyXG4iKTsKKwkJcmVzID0gMTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBtYXNrIG9mZiB1bnVzZWQgYml0cyAqLworCWlvYmFzZVswXSAmPSAweGZmZmZmZmZjOworCWlvYmFzZVsxXSAmPSAweGZmZmZmZmY4OworCWlvYmFzZVsyXSAmPSAweGZmZmZmZmZjOworCWlvYmFzZVszXSAmPSAweGZmZmZmZmY4OworCWlvYmFzZVs0XSAmPSAweGZmZmZmZmYwOworCWlvYmFzZVs1XSAmPSAweGZmZmZmYzAwOworCisJLyogZnJvbSBzYXRhX3NpbCBpbiBMaW51eCBrZXJuZWwgKi8KKwljbHMgPSBzaWxfZ2V0X2RldmljZV9jYWNoZV9saW5lIChkZXZubyk7CisJaWYgKGNscykgeworCQljbHMgPj49IDM7CisJCWNscysrOwkJLyogY2xzID0gKGxpbmVfc2l6ZS84KSsxICovCisJCXdyaXRlbCAoY2xzIDw8IDggfCBjbHMsIGlvYmFzZVs1XSArIFZORF9GSUZPQ0ZHX0NIMCk7CisJCXdyaXRlbCAoY2xzIDw8IDggfCBjbHMsIGlvYmFzZVs1XSArIFZORF9GSUZPQ0ZHX0NIMSk7CisJCXdyaXRlbCAoY2xzIDw8IDggfCBjbHMsIGlvYmFzZVs1XSArIFZORF9GSUZPQ0ZHX0NIMik7CisJCXdyaXRlbCAoY2xzIDw8IDggfCBjbHMsIGlvYmFzZVs1XSArIFZORF9GSUZPQ0ZHX0NIMyk7CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiQ2FjaGUgbGluZSBub3Qgc2V0LiBEcml2ZXIgbWF5IG5vdCBmdW5jdGlvblxuIik7CisJfQorCisJLyogRW5hYmxlIG9wZXJhdGlvbiAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkIChkZXZubywgUENJX0NPTU1BTkQsICZjbWQpOworCWNtZCB8PSBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQgKGRldm5vLCBQQ0lfQ09NTUFORCwgY21kKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0IHVzYWdlICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChkZXZubywgVk5EX1NZU0NPTkZTVEFULCAmc2NvbmYpOworCXNjb25mIHw9IChWTkRfU1lTQ09ORlNUQVRfQ0hOXzBfSU5UQkxPQ0sgfCBWTkRfU1lTQ09ORlNUQVRfQ0hOXzFfSU5UQkxPQ0spOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKGRldm5vLCBWTkRfU1lTQ09ORlNUQVQsIHNjb25mKTsKKworCXJlcyA9IDA7CisJcmV0dXJuIHJlczsKK30KKworLyogQ2hlY2sgaWYgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBwb3J0ICovCitpbnQgc2F0YV9idXNfcHJvYmUgKGludCBwb3J0bm8pCit7CisJdTMyIHBvcnQgPSBpb2Jhc2VbNV07CisJdTMyIHZhbDsKKwlzd2l0Y2ggKHBvcnRubykgeworCWNhc2UgMDoKKwkJcG9ydCArPSBWTkRfU1NUQVRVU19DSDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcG9ydCArPSBWTkRfU1NUQVRVU19DSDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcG9ydCArPSBWTkRfU1NUQVRVU19DSDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcG9ydCArPSBWTkRfU1NUQVRVU19DSDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwl2YWwgPSByZWFkbCAocG9ydCk7CisJaWYgKCh2YWwgJiBTQVRBX0RFVF9QUkVTKSA9PSBTQVRBX0RFVF9QUkVTKSB7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworaW50IHNhdGFfcGh5X3Jlc2V0IChpbnQgcG9ydG5vKQoreworCXUzMiBwb3J0ID0gaW9iYXNlWzVdOworCXUzMiB2YWw7CisJc3dpdGNoIChwb3J0bm8pIHsKKwljYXNlIDA6CisJCXBvcnQgKz0gVk5EX1NDT05UUk9MX0NIMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwb3J0ICs9IFZORF9TQ09OVFJPTF9DSDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcG9ydCArPSBWTkRfU0NPTlRST0xfQ0gyOworCQlicmVhazsKKwljYXNlIDM6CisJCXBvcnQgKz0gVk5EX1NDT05UUk9MX0NIMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXZhbCA9IHJlYWRsIChwb3J0KTsKKwl3cml0ZWwgKHZhbCB8IFNBVEFfU0NfREVUX1JTVCwgcG9ydCk7CisJbXNsZWVwICgxNTApOworCXdyaXRlbCAodmFsICYgflNBVEFfU0NfREVUX1JTVCwgcG9ydCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzY2FuX3NhdGEgKGludCBkZXYpCit7CisJLyogQSBiaXQgYnJhaW4gZGVhZCwgYnV0IHRoZSBjb2RlIGhhcyBhIGxlZ2FjeSAqLworCXN3aXRjaCAoZGV2KSB7CisJY2FzZSAwOgorCQlwb3J0WzBdLnBvcnRfbm8gPSAwOworCQlwb3J0WzBdLmlvYWRkci5jbWRfYWRkciA9IGlvYmFzZVs1XSArIFZORF9URjBfQ0gwOworCQlwb3J0WzBdLmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IHBvcnRbMF0uaW9hZGRyLmN0bF9hZGRyID0KKwkJICAgIChpb2Jhc2VbNV0gKyBWTkRfVEYyX0NIMCkgfCBBVEFfUENJX0NUTF9PRlM7CisJCXBvcnRbMF0uaW9hZGRyLmJtZG1hX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfQk1ETUFfQ0gwOworCQlicmVhazsKKwljYXNlIDE6CisJCXBvcnRbMV0ucG9ydF9ubyA9IDA7CisJCXBvcnRbMV0uaW9hZGRyLmNtZF9hZGRyID0gaW9iYXNlWzVdICsgVk5EX1RGMF9DSDE7CisJCXBvcnRbMV0uaW9hZGRyLmFsdHN0YXR1c19hZGRyID0gcG9ydFsxXS5pb2FkZHIuY3RsX2FkZHIgPQorCQkgICAgKGlvYmFzZVs1XSArIFZORF9URjJfQ0gxKSB8IEFUQV9QQ0lfQ1RMX09GUzsKKwkJcG9ydFsxXS5pb2FkZHIuYm1kbWFfYWRkciA9IGlvYmFzZVs1XSArIFZORF9CTURNQV9DSDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcG9ydFsyXS5wb3J0X25vID0gMDsKKwkJcG9ydFsyXS5pb2FkZHIuY21kX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfVEYwX0NIMjsKKwkJcG9ydFsyXS5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBwb3J0WzJdLmlvYWRkci5jdGxfYWRkciA9CisJCSAgICAoaW9iYXNlWzVdICsgVk5EX1RGMl9DSDIpIHwgQVRBX1BDSV9DVExfT0ZTOworCQlwb3J0WzJdLmlvYWRkci5ibWRtYV9hZGRyID0gaW9iYXNlWzVdICsgVk5EX0JNRE1BX0NIMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwb3J0WzNdLnBvcnRfbm8gPSAwOworCQlwb3J0WzNdLmlvYWRkci5jbWRfYWRkciA9IGlvYmFzZVs1XSArIFZORF9URjBfQ0gzOworCQlwb3J0WzNdLmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IHBvcnRbM10uaW9hZGRyLmN0bF9hZGRyID0KKwkJICAgIChpb2Jhc2VbNV0gKyBWTkRfVEYyX0NIMykgfCBBVEFfUENJX0NUTF9PRlM7CisJCXBvcnRbM10uaW9hZGRyLmJtZG1hX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfQk1ETUFfQ0gzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJUcmllZCB0byBzY2FuIHVua25vd24gcG9ydDogYXRhJWRcbiIsIGRldik7CisJCXJldHVybiAxOworCX0KKworCS8qIEluaXRpYWxpemUgb3RoZXIgcmVnaXN0ZXJzICovCisJc2F0YV9wb3J0ICgmcG9ydFtkZXZdLmlvYWRkcik7CisKKwkvKiBDaGVjayBmb3IgYXR0YWNoZWQgZGV2aWNlICovCisJaWYgKCFzYXRhX2J1c19wcm9iZSAoZGV2KSkgeworCQlwb3J0W2Rldl0ucG9ydF9zdGF0ZSA9IDA7CisJCWRlYnVnICgiU0FUQSMlZCBwb3J0IGlzIG5vdCBwcmVzZW50XG4iLCBkZXYpOworCX0gZWxzZSB7CisJCWRlYnVnICgiU0FUQSMlZCBwb3J0IGlzIHByZXNlbnRcbiIsIGRldik7CisJCWlmIChzYXRhX2J1c19zb2Z0cmVzZXQgKGRldikpIHsKKwkJCS8qIHNvZnQgcmVzZXQgZmFpbGVkLCB0cnkgYSBoYXJkIG9uZSAqLworCQkJc2F0YV9waHlfcmVzZXQgKGRldik7CisJCQlpZiAoc2F0YV9idXNfc29mdHJlc2V0IChkZXYpKSB7CisJCQkJcG9ydFtkZXZdLnBvcnRfc3RhdGUgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlwb3J0W2Rldl0ucG9ydF9zdGF0ZSA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwb3J0W2Rldl0ucG9ydF9zdGF0ZSA9IDE7CisJCX0KKwl9CisJaWYgKHBvcnRbZGV2XS5wb3J0X3N0YXRlID09IDEpIHsKKwkJLyogUHJvYmUgZGV2aWNlIGFuZCBzZXQgeGZlciBtb2RlICovCisJCXNhdGFfaWRlbnRpZnkgKGRldiwgMCk7CisJCXNldF9GZWF0dXJlX2NtZCAoZGV2LCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc2F0YV9zaWwzMTE0LmggYi9kcml2ZXJzL2Jsb2NrL3NhdGFfc2lsMzExNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjMwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3NhdGFfc2lsMzExNC5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSBFeGNpdG8gRWxla3Ryb25payBpIFNr5W5lIEFCLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBUb3IgS3JpbGwgPHRvckBleGNpdG8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgU0FUQV9TSUwzMTE0X0gKKyNkZWZpbmUgU0FUQV9TSUwzMTE0X0gKKworc3RydWN0IHNhdGFfaW9wb3J0cyB7CisJdW5zaWduZWQgbG9uZyBjbWRfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGVycm9yX2FkZHI7CisJdW5zaWduZWQgbG9uZyBmZWF0dXJlX2FkZHI7CisJdW5zaWduZWQgbG9uZyBuc2VjdF9hZGRyOworCXVuc2lnbmVkIGxvbmcgbGJhbF9hZGRyOworCXVuc2lnbmVkIGxvbmcgbGJhbV9hZGRyOworCXVuc2lnbmVkIGxvbmcgbGJhaF9hZGRyOworCXVuc2lnbmVkIGxvbmcgZGV2aWNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGNvbW1hbmRfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFsdHN0YXR1c19hZGRyOworCXVuc2lnbmVkIGxvbmcgY3RsX2FkZHI7CisJdW5zaWduZWQgbG9uZyBibWRtYV9hZGRyOworCXVuc2lnbmVkIGxvbmcgc2NyX2FkZHI7Cit9OworCitzdHJ1Y3Qgc2F0YV9wb3J0IHsKKwl1bnNpZ25lZCBjaGFyIHBvcnRfbm87CS8qIHByaW1hcnk9MCwgc2Vjb25kYXJ5PTEgICAgICAgKi8KKwlzdHJ1Y3Qgc2F0YV9pb3BvcnRzIGlvYWRkcjsJLyogQVRBIGNtZC9jdGwvZG1hIHJlZyBibGtzICAgICAqLworCXVuc2lnbmVkIGNoYXIgY3RsX3JlZzsKKwl1bnNpZ25lZCBjaGFyIGxhc3RfY3RsOworCXVuc2lnbmVkIGNoYXIgcG9ydF9zdGF0ZTsJLyogMS1wb3J0IGlzIGF2YWlsYWJsZSBhbmQgICAgICAqLworCS8qIDAtcG9ydCBpcyBub3QgYXZhaWxhYmxlICAgICAgKi8KKwl1bnNpZ25lZCBjaGFyIGRldl9tYXNrOworfTsKKworLyogTWlzc2luZyBhdGEgZGVmaW5lcyAqLworI2RlZmluZSBBVEFfQ01EX1NUQU5EQlkJCQkweEUyCisjZGVmaW5lIEFUQV9DTURfU1RBTkRCWU5PVzEJCTB4RTAKKyNkZWZpbmUgQVRBX0NNRF9JRExFCQkJMHhFMworI2RlZmluZSBBVEFfQ01EX0lETEVJTU1FRElBVEUJMHhFMQorCisvKiBEZWZpbmVzIGZvciBTSUwzMTE0IGNoaXAgKi8KKworLyogUENJIGRlZmluZXMgKi8KKyNkZWZpbmUgU0lMX1ZFTkRfSUQJCTB4MTA5NQorI2RlZmluZSBTSUwzMTE0X0RFVklDRV9JRAkweDMxMTQKKworLyogc29tZSB2ZW5kb3Igc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lCVZORF9TWVNDT05GU1RBVAkweDg4CS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFN0YXR1cyBhbmQgQ29tbWFuZCAqLworI2RlZmluZSBWTkRfU1lTQ09ORlNUQVRfQ0hOXzBfSU5UQkxPQ0sgKDE8PDIyKQorI2RlZmluZSBWTkRfU1lTQ09ORlNUQVRfQ0hOXzFfSU5UQkxPQ0sgKDE8PDIzKQorI2RlZmluZSBWTkRfU1lTQ09ORlNUQVRfQ0hOXzJfSU5UQkxPQ0sgKDE8PDI0KQorI2RlZmluZSBWTkRfU1lTQ09ORlNUQVRfQ0hOXzNfSU5UQkxPQ0sgKDE8PDI1KQorCisvKiBpbnRlcm5hbCByZWdpc3RlcnMgbWFwcGVkIGJ5IEJBUjUgKi8KKy8qIFNBVEEgQ29udHJvbCovCisjZGVmaW5lIFZORF9TQ09OVFJPTF9DSDAJMHgxMDAKKyNkZWZpbmUgVk5EX1NDT05UUk9MX0NIMQkweDE4MAorI2RlZmluZSBWTkRfU0NPTlRST0xfQ0gyCTB4MzAwCisjZGVmaW5lIFZORF9TQ09OVFJPTF9DSDMJMHgzODAKKworI2RlZmluZSBTQVRBX1NDX0lQTV9UMlAJCSgxPDwxNikKKyNkZWZpbmUgU0FUQV9TQ19JUE1fVDJTCQkoMjw8MTYpCisjZGVmaW5lIFNBVEFfU0NfU1BEXzFfNQkJKDE8PDQpCisjZGVmaW5lIFNBVEFfU0NfU1BEXzNfMAkJKDI8PDQpCisjZGVmaW5lIFNBVEFfU0NfREVUX1JTVAkJKDEpCS8qIEFUQSBSZXNldCBzZXF1ZW5jZSAqLworI2RlZmluZSBTQVRBX1NDX0RFVF9QRElTCSg0KQkvKiBQSFkgRGlzYWJsZSAqLworCisvKiBTQVRBIFN0YXR1cyAqLworI2RlZmluZSBWTkRfU1NUQVRVU19DSDAJCTB4MTA0CisjZGVmaW5lIFZORF9TU1RBVFVTX0NIMQkJMHgxODQKKyNkZWZpbmUgVk5EX1NTVEFUVVNfQ0gyCQkweDMwNAorI2RlZmluZSBWTkRfU1NUQVRVU19DSDMJCTB4Mzg0CisKKyNkZWZpbmUgU0FUQV9TU19JUE1fQUNUSVZFCSgxPDw4KQorI2RlZmluZSBTQVRBX1NTX0lQTV9QQVJUSUFMCSgyPDw4KQorI2RlZmluZSBTQVRBX1NTX0lQTV9TTFVNQkVSCSg2PDw4KQorI2RlZmluZSBTQVRBX1NTX1NQRF8xXzUJCSgxPDw0KQorI2RlZmluZSBTQVRBX1NTX1NQRF8zXzAJCSgyPDw0KQorI2RlZmluZSBTQVRBX0RFVF9QX05PUEhZCSgxKQkvKiBEZXZpY2UgcHJlc2VuY2UgYnV0IG5vIFBIWSBjb25uZWN0aW9uIGVzdGFibGlzaGVkICovCisjZGVmaW5lIFNBVEFfREVUX1BSRVMJCSgzKQkvKiBEZXZpY2UgcHJlc2VuY2UgYW5kIGFjdGl2ZSBQSFkgKi8KKyNkZWZpbmUgU0FUQV9ERVRfT0ZGTElORQkoNCkJLyogRGV2aWNlIG9mZmxpbmUgb3IgaW4gbG9vcGJhY2sgbW9kZSAqLworCisvKiBUYXNrIGZpbGUgcmVnaXN0ZXJzIGluIEJBUjUgbWFwcGluZyAqLworI2RlZmluZSBWTkRfVEYwX0NIMAkJCTB4ODAKKyNkZWZpbmUgVk5EX1RGMF9DSDEJCQkweGMwCisjZGVmaW5lIFZORF9URjBfQ0gyCQkJMHgyODAKKyNkZWZpbmUgVk5EX1RGMF9DSDMJCQkweDJjMAorI2RlZmluZSBWTkRfVEYxX0NIMAkJCTB4ODgKKyNkZWZpbmUgVk5EX1RGMV9DSDEJCQkweGM4CisjZGVmaW5lIFZORF9URjFfQ0gyCQkJMHgyODgKKyNkZWZpbmUgVk5EX1RGMV9DSDMJCQkweDJjOAorI2RlZmluZSBWTkRfVEYyX0NIMAkJCTB4ODgKKyNkZWZpbmUgVk5EX1RGMl9DSDEJCQkweGM4CisjZGVmaW5lIFZORF9URjJfQ0gyCQkJMHgyODgKKyNkZWZpbmUgVk5EX1RGMl9DSDMJCQkweDJjOAorCisjZGVmaW5lIFZORF9CTURNQV9DSDAJCTB4MDAKKyNkZWZpbmUgVk5EX0JNRE1BX0NIMQkJMHgwOAorI2RlZmluZSBWTkRfQk1ETUFfQ0gyCQkweDIwMAorI2RlZmluZSBWTkRfQk1ETUFfQ0gzCQkweDIwOAorI2RlZmluZSBWTkRfQk1ETUEyX0NIMAkJMHgxMAorI2RlZmluZSBWTkRfQk1ETUEyX0NIMQkJMHgxOAorI2RlZmluZSBWTkRfQk1ETUEyX0NIMgkJMHgyMTAKKyNkZWZpbmUgVk5EX0JNRE1BMl9DSDMJCTB4MjE4CisKKy8qIEZJRk8gY29udHJvbCAqLworI2RlZmluZQlWTkRfRklGT0NGR19DSDAJCTB4NDAKKyNkZWZpbmUJVk5EX0ZJRk9DRkdfQ0gxCQkweDQ0CisjZGVmaW5lCVZORF9GSUZPQ0ZHX0NIMgkJMHgyNDAKKyNkZWZpbmUJVk5EX0ZJRk9DRkdfQ0gzCQkweDI0NAorCisvKiBUYXNrIEZpbGUgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzICovCisjZGVmaW5lIFZORF9URl9DTlNUX0NIMAkJMHhhMAorI2RlZmluZSBWTkRfVEZfQ05TVF9DSDEJCTB4ZTAKKyNkZWZpbmUgVk5EX1RGX0NOU1RfQ0gyCQkweDJhMAorI2RlZmluZSBWTkRfVEZfQ05TVF9DSDMJCTB4MmUwCisKKyNkZWZpbmUgVk5EX1RGX0NOU1RfQkZDTUQJKDE8PDEpCisjZGVmaW5lIFZORF9URl9DTlNUX0NITlJTVAkoMTw8MikKKyNkZWZpbmUgVk5EX1RGX0NOU1RfVkRNQQkoMTw8MTApCisjZGVmaW5lIFZORF9URl9DTlNUX0lOVFNUCSgxPDwxMSkKKyNkZWZpbmUgVk5EX1RGX0NOU1RfV0RUTwkoMTw8MTIpCisjZGVmaW5lIFZORF9URl9DTlNUX1dERU4JKDE8PDEzKQorI2RlZmluZSBWTkRfVEZfQ05TVF9XRElFTgkoMTw8MTQpCisKKy8qIGZvciB0ZXN0aW5nICovCisjZGVmaW5lIFZORF9TU0RSCQkJMHgwNGMJLyogU3lzdGVtIFNvZnR3YXJlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVk5EX0ZNQUNTCQkJMHgwNTAJLyogRmxhc2ggTWVtb3J5IEFkZHJlc3MgY29udHJvbCBhbmQgc3RhdHVzICovCisKKyNlbmRpZgo=